/*Copyright (C) 2009 Careil Baptiste

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

#include "Clock.h"
#include <stdio.h>

#ifdef WIN32
#include <windows.h>

double GetWin32Time()
{
  return (double)(GetTickCount()) / 1000.;
}

#else
#include <sys/time.h>

double GetUnixTime()
{
  double retVal = 0.0;
  struct timeval tv;
  if (gettimeofday(&tv, NULL) == -1)
    {
      perror("CSLP: gettimeofday() error.\n");
    }
  else
    {
      retVal = (double)(tv.tv_sec) + (double)(tv.tv_usec) / 1000000.;
    }
  return retVal;
}
#endif

void DLL_IMPEXP CSLP_ResetClock(CSLP_CLOCK* clk)
{
  if (clk == NULL)
    return;

#ifdef WIN32
  *clk = GetWin32Time();
#else
  *clk = GetUnixTime();
#endif
}

double DLL_IMPEXP CSLP_GetElapsedTime(CSLP_CLOCK clk)
{
#ifdef WIN32
  return GetWin32Time() - clk;
#else
  return GetUnixTime() - clk;
#endif
}

